#ifndef __KEY_H__
#define __KEY_H__

extern uint8_t key_DoubleShotPresFlag;
extern uint8_t key_DoubleLongPresFlag;
extern uint8_t key_Num;

#define KEY1		P23
#define KEY2		P22
#define KEY3		P21
#define KEY4		P35


typedef struct
{
    uint8_t        	key_Index;          /*按键索引                                          */ 
//    uint8_t        	pressed_state;      /*按键按下时的状态，0：按下时为低电平，1：按下时为高电平 */
	uint8_t        	adc_low;      		/*按键adc检测百分比范围低值 */
	uint8_t        	adc_high;      		/*按键adc检测百分比范围高值  */
	uint8_t			key_shotflag;		/*短按标志位，用于双按按键实现*/
	uint8_t			key_longflag;		/*长按标志位，用于双按按键实现*/
}key_struct_t;

extern key_struct_t key_list[];

/*按键状态*/
typedef enum
{
    KEY_RELEASE,                        /*释放松开      */
    KEY_CONFIRM,                        /*消抖确认      */
    KEY_SHORT_PRESSED,                  /*短按          */
    KEY_LONG_PRESSED,                   /*长按          */
}key_status_t;

/*按键事件*/
typedef enum
{
    EVENT_NULL,
    EVENT_SHORT_PRESSED,                /*短按事件  */ 
    EVENT_LONG_PRESSED,                 /*长按事件  */ 
}key_event_t;

typedef struct
{
    key_status_t current_state;         /*按键当前状态      */
    uint32_t  pressed_time;             /*按下时间          */
    key_event_t key_event;              /*按键事件          */
}key_param_t;

void key_Init(void);
uint8_t read_key_state(uint8_t index);
uint8_t key_scan(void);
void key_handle(void);
uint8_t key_DoubleLongPress(void);
uint8_t key_DoubleShotPress(void);
uint8_t key_GetNum(void);
void key_DoubleLongState(void);

#endif
